﻿using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Threading;
using QLNHK.BLL;
using Infragistics.Win.UltraWinGrid;
using System.Data.SqlClient;
using Infragistics.Win.Misc;
using QLNHK.Controls;

namespace QLNHK.DANHMUC
{
    public class FrmDM : FrmBase_DM
    {
        #region Phần khai báo
        private int i;//biến đếm
        private string[] listUnDelete;  //mảng các row được xóa
        private string[] listDeleteSuccess;     //mảng các row không được xóa
        private string strIDHeader;     //lưu id danh mục 
        private cls_Role ObjRole;
        private Cls_PHANQUYEN_NHOM ObjPhanQuyen = new Cls_PHANQUYEN_NHOM();
        private string strCurrentForm;      //lưu tên danh mục được chọn tương ứng (kiểu lớp HETHONG.HRMGlobal.DMCatalogue)
        private bool _isDelete;     //lưu trạng thái của row danh mục được xóa
        private UltraGridRow curEditRow;   //row hiện tại được active

        //===========Phần khai báo các Object Danh mục=======================
        private DM_DanToc ObjDMDanToc;
        private DM_TonGiao ObjDMTonGiao;
        private DM_QuocTich ObjDMQuocTich;
        private DM_QuanHeGiaDinh ObjDMQuanHeGiaDinh;
        private DM_TrinhDoChuyenMon ObjDMTrinhDoChuyenMon;
        private DM_TrinhDoHocVan ObjDMTrinhDoHocVan;
        private DM_TrinhDoNgoaiNgu ObjDMTrinhDoNgoaiNgu;
        private DM_LoaiHoKhau ObjDMLoaiHoKhau;

        private DoiTuong_PhanLoai ObjDMPhanLoai;
        private DoiTuong_DanhMuc ObjDMDanhMuc;
        private DoiTuong_He ObjDMHe;

        private DataSet dsDM;
        private Infragistics.Win.Misc.UltraGroupBox gbTop;
        private System.Windows.Forms.Panel panel3;
        private Infragistics.Win.Misc.UltraButton btnCapNhat;
        private Infragistics.Win.Misc.UltraButton btnMoRong;
        private Infragistics.Win.Misc.UltraButton BtnOptionGrid;
        private Infragistics.Win.Misc.UltraButton btnReset;
        private ValidControl.ContainerValidator cvError;
        private ValidControl.ListValidationSummary lvsError;
        private Infragistics.Win.UltraWinEditors.UltraTextEditor txtChuThich;
        private Infragistics.Win.Misc.UltraLabel lbChuThich;
        private Infragistics.Win.UltraWinEditors.UltraTextEditor txtTen;
        private ValidControl.RequiredFieldValidator rfvtxtTen;
        #endregion
        private UltraButton btnChon;
        private Label lbTen;

        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public FrmDM(string strFormName, bool bViewChon)
        {
            InitializeComponent();

            if (bViewChon)
            {
                btnChon.Visible = true;
                this.StartPosition = FormStartPosition.CenterScreen;
            }
            else
                btnChon.Visible = false;

            strCurrentForm = strFormName;
            this.fillDataToGrid(strCurrentForm);
            rfvtxtTen.ControlToValidate = txtTen;
            rfvtxtTen.ErrorMessage = "Tên không được rỗng";
            cvError.ContainerToValidate = this;

            switch (strFormName)
            {
                //Ho khau - Nhan khau
                case DMCatalogue.DM_QUOCTICH:
                    this.SetHeaderGrid("ID", "Tên quốc tịch");
                    this.strIDHeader = "ID";
                    this.Text = "Danh mục quốc tịch";
                    lbTen.Text = "Tên quốc tịch:";
                    gbTop.Text = "Thông tin danh mục quốc tịch";
                    UGMain.Text = "Danh sách quốc tịch";
                    break;
                case DMCatalogue.DM_DANTOC:
                    this.SetHeaderGrid("ID", "Tên dân tộc");
                    this.strIDHeader = "ID";
                    this.Text = "Danh mục dân tộc";
                    lbTen.Text = "Tên dân tộc:";
                    gbTop.Text = "Thông tin danh mục dân tộc";
                    UGMain.Text = "Danh sách dân tộc";
                    break;
                case DMCatalogue.DM_TONGIAO:
                    this.SetHeaderGrid("ID", "Tên tôn giáo");
                    this.strIDHeader = "ID";
                    this.Text = "Danh mục tôn giáo";
                    lbTen.Text = "Tên tôn giáo:";
                    gbTop.Text = "Thông tin danh mục tôn giáo";
                    UGMain.Text = "Danh sách tôn giáo";
                    break;
                case DMCatalogue.DM_QUANHE_GIADINH:
                    this.SetHeaderGrid("ID", "Tên quan hệ gia đình");
                    this.strIDHeader = "ID";
                    this.Text = "Danh mục quan hệ gia đình";
                    lbTen.Text = "Tên quan hệ gia đình:";
                    gbTop.Text = "Thông tin danh mục quan hệ gia đình";
                    UGMain.Text = "Danh sách quan hệ gia đình";
                    break;

                case DMCatalogue.DM_TRINHDO_HOCVAN:
                    this.SetHeaderGrid("ID", "Tên trình độ học vấn");
                    this.strIDHeader = "ID";
                    this.Text = "Danh mục trình độ học vấn";
                    lbTen.Text = "Tên trình độ học vấn:";
                    gbTop.Text = "Thông tin danh mục trình độ học vấn";
                    UGMain.Text = "Danh sách trình độ học vấn";
                    break;
                case DMCatalogue.DM_TRINHDO_NGOAINGU:
                    this.SetHeaderGrid("ID", "Tên trình độ ngoại ngữ");
                    this.strIDHeader = "ID";
                    this.Text = "Danh mục trình độ ngoại ngữ";
                    lbTen.Text = "Tên trình độ ngoại ngữ:";
                    gbTop.Text = "Thông tin danh mục trình độ ngoại ngữ";
                    UGMain.Text = "Danh sách trình độ ngoại ngữ";
                    break;
                case DMCatalogue.DM_TRINHDO_CHUYENMON:
                    this.SetHeaderGrid("ID", "Tên trình độ chuyên môn");
                    this.strIDHeader = "ID";
                    this.Text = "Danh mục trình độ chuyên môn";
                    lbTen.Text = "Tên trình độ chuyên môn:";
                    gbTop.Text = "Thông tin danh mục trình độ chuyên môn";
                    UGMain.Text = "Danh sách trình độ chuyên môn";
                    break;

                case DMCatalogue.DM_LOAIHOKHAU:
                    this.SetHeaderGrid("ID", "Tên loại hộ khẩu");
                    this.strIDHeader = "ID";
                    this.Text = "Danh mục loại hộ khẩu";
                    lbTen.Text = "Tên loại hộ khẩu:";
                    gbTop.Text = "Thông tin danh mục loại hộ khẩu";
                    UGMain.Text = "Danh sách loại hộ khẩu";
                    break;

                //Doi tuong
                case DMCatalogue.DM_LOAIDOITUONG:
                    this.SetHeaderGrid("ID", "Tên loại đối tượng");
                    this.strIDHeader = "ID";
                    this.Text = "Danh mục loại đối tượng";
                    lbTen.Text = "Tên loại đối tượng:";
                    gbTop.Text = "Thông tin danh mục loại đối tượng";
                    UGMain.Text = "Danh sách loại đối tượng";
                    break;
                case DMCatalogue.DM_DANHMUCDOITUONG:
                    this.SetHeaderGrid("ID", "Tên danh mục đối tượng");
                    this.strIDHeader = "ID";
                    this.Text = "Danh mục đối tượng";
                    lbTen.Text = "Tên danh mục đối tượng:";
                    gbTop.Text = "Thông tin danh mục đối tượng";
                    UGMain.Text = "Danh sách danh mục đối tượng";
                    break;
                case DMCatalogue.DM_HEDOITUONG:
                    this.SetHeaderGrid("ID", "Tên hệ đối tượng");
                    this.strIDHeader = "ID";
                    this.Text = "Danh mục hệ đối tượng";
                    lbTen.Text = "Tên hệ đối tượng:";
                    gbTop.Text = "Thông tin danh mục hệ đối tượng";
                    UGMain.Text = "Danh sách hệ đối tượng";
                    break;
            }

            //thiết lập lại vị trí các control
            this.txtTen.Location = new System.Drawing.Point(lbTen.Location.X + lbTen.Size.Width + lbTen.Text.Length, 5); //System.Drawing.Point(96, 5);
            this.txtChuThich.Location = new System.Drawing.Point(lbTen.Location.X + lbTen.Size.Width + lbTen.Text.Length, 29); //System.Drawing.Point(96, 5);
            this.btnCapNhat.Location = new System.Drawing.Point(txtChuThich.Location.X, 54);
            this.btnReset.Location = new System.Drawing.Point(btnCapNhat.Location.X + btnCapNhat.Size.Width + 1, 54);
            this.txtTen.Size = new System.Drawing.Size(gbTop.Size.Width - lbTen.Size.Width - 50, 22);
            this.txtChuThich.Size = new System.Drawing.Size(gbTop.Size.Width - lbTen.Size.Width - 50, 22);
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            Infragistics.Win.Appearance appearance3 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance4 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance5 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance6 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance7 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance8 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance9 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance10 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance11 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance12 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance13 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance14 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance15 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance16 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance17 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance18 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance2 = new Infragistics.Win.Appearance();
            Infragistics.Win.Appearance appearance1 = new Infragistics.Win.Appearance();
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmDM));
            this.gbTop = new Infragistics.Win.Misc.UltraGroupBox();
            this.panel3 = new System.Windows.Forms.Panel();
            this.lbTen = new System.Windows.Forms.Label();
            this.btnCapNhat = new Infragistics.Win.Misc.UltraButton();
            this.txtChuThich = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
            this.lbChuThich = new Infragistics.Win.Misc.UltraLabel();
            this.txtTen = new Infragistics.Win.UltraWinEditors.UltraTextEditor();
            this.btnReset = new Infragistics.Win.Misc.UltraButton();
            this.btnMoRong = new Infragistics.Win.Misc.UltraButton();
            this.BtnOptionGrid = new Infragistics.Win.Misc.UltraButton();
            this.cvError = new ValidControl.ContainerValidator();
            this.lvsError = new ValidControl.ListValidationSummary();
            this.rfvtxtTen = new ValidControl.RequiredFieldValidator();
            this.btnChon = new Infragistics.Win.Misc.UltraButton();
            this.panel1.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.ultraGridBagLayoutManager1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.UGMain)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.gbTop)).BeginInit();
            this.gbTop.SuspendLayout();
            this.panel3.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.txtChuThich)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.txtTen)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.rfvtxtTen)).BeginInit();
            this.SuspendLayout();
            // 
            // panel1
            // 
            this.panel1.BackColor = System.Drawing.Color.WhiteSmoke;
            this.panel1.Controls.Add(this.btnChon);
            this.panel1.Controls.Add(this.BtnOptionGrid);
            this.panel1.Location = new System.Drawing.Point(0, 476);
            this.panel1.Size = new System.Drawing.Size(831, 34);
            this.panel1.TabIndex = 2;
            this.panel1.Controls.SetChildIndex(this.btnExit, 0);
            this.panel1.Controls.SetChildIndex(this.btnCancel, 0);
            this.panel1.Controls.SetChildIndex(this.btnDelete, 0);
            this.panel1.Controls.SetChildIndex(this.btnUpdate, 0);
            this.panel1.Controls.SetChildIndex(this.btnEdit, 0);
            this.panel1.Controls.SetChildIndex(this.btnInsert, 0);
            this.panel1.Controls.SetChildIndex(this.BtnOptionGrid, 0);
            this.panel1.Controls.SetChildIndex(this.btnChon, 0);
            // 
            // UGMain
            // 
            appearance3.BackGradientStyle = Infragistics.Win.GradientStyle.None;
            this.UGMain.DisplayLayout.Appearance = appearance3;
            this.UGMain.DisplayLayout.AutoFitStyle = Infragistics.Win.UltraWinGrid.AutoFitStyle.ResizeAllColumns;
            this.UGMain.DisplayLayout.BorderStyle = Infragistics.Win.UIElementBorderStyle.None;
            this.UGMain.DisplayLayout.BorderStyleCaption = Infragistics.Win.UIElementBorderStyle.None;
            appearance4.BackColor = System.Drawing.Color.White;
            appearance4.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(234)))), ((int)(((byte)(253)))));
            appearance4.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
            appearance4.FontData.BoldAsString = "True";
            appearance4.TextHAlignAsString = "Left";
            appearance4.TextVAlignAsString = "Middle";
            this.UGMain.DisplayLayout.CaptionAppearance = appearance4;
            this.UGMain.DisplayLayout.CaptionVisible = Infragistics.Win.DefaultableBoolean.True;
            this.UGMain.DisplayLayout.GroupByBox.BorderStyle = Infragistics.Win.UIElementBorderStyle.Solid;
            this.UGMain.DisplayLayout.InterBandSpacing = 10;
            this.UGMain.DisplayLayout.MaxColScrollRegions = 1;
            this.UGMain.DisplayLayout.MaxRowScrollRegions = 1;
            appearance5.BackColor = System.Drawing.SystemColors.Window;
            appearance5.ForeColor = System.Drawing.SystemColors.ControlText;
            this.UGMain.DisplayLayout.Override.ActiveCellAppearance = appearance5;
            appearance6.BackColor = System.Drawing.SystemColors.Highlight;
            appearance6.ForeColor = System.Drawing.SystemColors.HighlightText;
            this.UGMain.DisplayLayout.Override.ActiveRowAppearance = appearance6;
            this.UGMain.DisplayLayout.Override.AllowDelete = Infragistics.Win.DefaultableBoolean.False;
            this.UGMain.DisplayLayout.Override.AllowGroupBy = Infragistics.Win.DefaultableBoolean.False;
            this.UGMain.DisplayLayout.Override.AllowUpdate = Infragistics.Win.DefaultableBoolean.True;
            this.UGMain.DisplayLayout.Override.BorderStyleCell = Infragistics.Win.UIElementBorderStyle.Solid;
            this.UGMain.DisplayLayout.Override.BorderStyleRow = Infragistics.Win.UIElementBorderStyle.Solid;
            appearance7.BackColor = System.Drawing.Color.Transparent;
            this.UGMain.DisplayLayout.Override.CardAreaAppearance = appearance7;
            appearance8.BorderColor = System.Drawing.Color.Silver;
            appearance8.TextTrimming = Infragistics.Win.TextTrimming.EllipsisCharacter;
            this.UGMain.DisplayLayout.Override.CellAppearance = appearance8;
            this.UGMain.DisplayLayout.Override.CellClickAction = Infragistics.Win.UltraWinGrid.CellClickAction.RowSelect;
            this.UGMain.DisplayLayout.Override.CellPadding = 0;
            appearance9.BackColor = System.Drawing.SystemColors.Control;
            appearance9.BackColor2 = System.Drawing.SystemColors.ControlDark;
            appearance9.BackGradientAlignment = Infragistics.Win.GradientAlignment.Element;
            appearance9.BackGradientStyle = Infragistics.Win.GradientStyle.Horizontal;
            appearance9.BorderColor = System.Drawing.SystemColors.Window;
            this.UGMain.DisplayLayout.Override.GroupByRowAppearance = appearance9;
            appearance10.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(234)))), ((int)(((byte)(253)))));
            appearance10.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(151)))), ((int)(((byte)(253)))));
            appearance10.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
            appearance10.FontData.BoldAsString = "False";
            appearance10.FontData.Name = "Tahoma";
            appearance10.FontData.SizeInPoints = 8F;
            appearance10.ForeColor = System.Drawing.Color.Black;
            appearance10.ThemedElementAlpha = Infragistics.Win.Alpha.Transparent;
            this.UGMain.DisplayLayout.Override.HeaderAppearance = appearance10;
            this.UGMain.DisplayLayout.Override.HeaderClickAction = Infragistics.Win.UltraWinGrid.HeaderClickAction.SortMulti;
            appearance11.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(151)))), ((int)(((byte)(253)))));
            this.UGMain.DisplayLayout.Override.RowAppearance = appearance11;
            appearance12.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(234)))), ((int)(((byte)(253)))));
            appearance12.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(151)))), ((int)(((byte)(253)))));
            appearance12.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
            this.UGMain.DisplayLayout.Override.RowSelectorAppearance = appearance12;
            this.UGMain.DisplayLayout.Override.RowSelectorHeaderStyle = Infragistics.Win.UltraWinGrid.RowSelectorHeaderStyle.SeparateElement;
            this.UGMain.DisplayLayout.Override.RowSelectorNumberStyle = Infragistics.Win.UltraWinGrid.RowSelectorNumberStyle.VisibleIndex;
            this.UGMain.DisplayLayout.Override.RowSelectors = Infragistics.Win.DefaultableBoolean.True;
            this.UGMain.DisplayLayout.Override.RowSpacingBefore = 0;
            appearance13.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(181)))), ((int)(((byte)(234)))), ((int)(((byte)(253)))));
            appearance13.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(151)))), ((int)(((byte)(253)))));
            appearance13.BackGradientStyle = Infragistics.Win.GradientStyle.Vertical;
            appearance13.ForeColor = System.Drawing.Color.Black;
            this.UGMain.DisplayLayout.Override.SelectedRowAppearance = appearance13;
            appearance14.BackColor = System.Drawing.SystemColors.ControlLight;
            this.UGMain.DisplayLayout.Override.TemplateAddRowAppearance = appearance14;
            this.UGMain.DisplayLayout.RowConnectorColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(151)))), ((int)(((byte)(253)))));
            this.UGMain.DisplayLayout.RowConnectorStyle = Infragistics.Win.UltraWinGrid.RowConnectorStyle.Solid;
            this.UGMain.DisplayLayout.ScrollBounds = Infragistics.Win.UltraWinGrid.ScrollBounds.ScrollToFill;
            this.UGMain.DisplayLayout.ScrollStyle = Infragistics.Win.UltraWinGrid.ScrollStyle.Immediate;
            this.UGMain.Location = new System.Drawing.Point(0, 116);
            this.UGMain.Size = new System.Drawing.Size(831, 360);
            this.UGMain.TabIndex = 1;
            this.UGMain.Text = "Danh sách dân tộc";
            this.UGMain.InitializeLayout += new Infragistics.Win.UltraWinGrid.InitializeLayoutEventHandler(this.UGMain_InitializeLayout);
            this.UGMain.AfterRowsDeleted += new System.EventHandler(this.UGMain_AfterRowsDeleted);
            this.UGMain.BeforeRowsDeleted += new Infragistics.Win.UltraWinGrid.BeforeRowsDeletedEventHandler(this.UGMain_BeforeRowsDeleted);
            this.UGMain.DoubleClickRow += new Infragistics.Win.UltraWinGrid.DoubleClickRowEventHandler(this.UGMain_DoubleClickRow);
            this.UGMain.KeyDown += new System.Windows.Forms.KeyEventHandler(this.UGMain_KeyDown);
            // 
            // btnInsert
            // 
            this.btnInsert.Location = new System.Drawing.Point(273, 4);
            this.btnInsert.Size = new System.Drawing.Size(72, 26);
            this.btnInsert.TabIndex = 1;
            this.btnInsert.Visible = false;
            this.btnInsert.Click += new System.EventHandler(this.BtnEvent_Click);
            // 
            // btnEdit
            // 
            this.btnEdit.Location = new System.Drawing.Point(345, 4);
            this.btnEdit.Size = new System.Drawing.Size(72, 26);
            this.btnEdit.TabIndex = 2;
            this.btnEdit.Click += new System.EventHandler(this.BtnEvent_Click);
            // 
            // btnUpdate
            // 
            this.btnUpdate.Enabled = true;
            this.btnUpdate.Location = new System.Drawing.Point(417, 4);
            this.btnUpdate.Size = new System.Drawing.Size(72, 26);
            this.btnUpdate.TabIndex = 3;
            this.btnUpdate.Click += new System.EventHandler(this.BtnEvent_Click);
            // 
            // btnDelete
            // 
            this.btnDelete.Location = new System.Drawing.Point(489, 4);
            this.btnDelete.Size = new System.Drawing.Size(72, 26);
            this.btnDelete.TabIndex = 4;
            this.btnDelete.Click += new System.EventHandler(this.BtnEvent_Click);
            // 
            // btnCancel
            // 
            this.btnCancel.Location = new System.Drawing.Point(561, 4);
            this.btnCancel.Size = new System.Drawing.Size(72, 26);
            this.btnCancel.Click += new System.EventHandler(this.BtnEvent_Click);
            // 
            // btnExit
            // 
            this.btnExit.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.btnExit.Location = new System.Drawing.Point(633, 4);
            this.btnExit.Size = new System.Drawing.Size(72, 26);
            this.btnExit.TabIndex = 6;
            this.btnExit.Click += new System.EventHandler(this.BtnEvent_Click);
            // 
            // imgList
            // 
            this.imgList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgList.ImageStream")));
            this.imgList.Images.SetKeyName(0, "");
            this.imgList.Images.SetKeyName(1, "");
            this.imgList.Images.SetKeyName(2, "");
            this.imgList.Images.SetKeyName(3, "");
            this.imgList.Images.SetKeyName(4, "");
            this.imgList.Images.SetKeyName(5, "");
            this.imgList.Images.SetKeyName(6, "");
            this.imgList.Images.SetKeyName(7, "");
            this.imgList.Images.SetKeyName(8, "");
            this.imgList.Images.SetKeyName(9, "");
            this.imgList.Images.SetKeyName(10, "");
            this.imgList.Images.SetKeyName(11, "");
            this.imgList.Images.SetKeyName(12, "");
            // 
            // gbTop
            // 
            this.gbTop.BackColorInternal = System.Drawing.Color.White;
            this.gbTop.Controls.Add(this.panel3);
            this.gbTop.Dock = System.Windows.Forms.DockStyle.Top;
            this.gbTop.Location = new System.Drawing.Point(0, 0);
            this.gbTop.Name = "gbTop";
            this.gbTop.Size = new System.Drawing.Size(831, 116);
            this.gbTop.TabIndex = 0;
            this.gbTop.Text = "Thông tin dân tộc";
            // 
            // panel3
            // 
            this.panel3.Controls.Add(this.lbTen);
            this.panel3.Controls.Add(this.btnCapNhat);
            this.panel3.Controls.Add(this.txtChuThich);
            this.panel3.Controls.Add(this.lbChuThich);
            this.panel3.Controls.Add(this.txtTen);
            this.panel3.Controls.Add(this.btnReset);
            this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
            this.panel3.Location = new System.Drawing.Point(3, 17);
            this.panel3.Name = "panel3";
            this.panel3.Size = new System.Drawing.Size(825, 96);
            this.panel3.TabIndex = 0;
            // 
            // lbTen
            // 
            this.lbTen.AutoSize = true;
            this.lbTen.Location = new System.Drawing.Point(5, 14);
            this.lbTen.Name = "lbTen";
            this.lbTen.Size = new System.Drawing.Size(35, 13);
            this.lbTen.TabIndex = 5;
            this.lbTen.Text = "label1";
            // 
            // btnCapNhat
            // 
            appearance15.Image = ((object)(resources.GetObject("appearance15.Image")));
            this.btnCapNhat.Appearance = appearance15;
            this.btnCapNhat.BackColorInternal = System.Drawing.SystemColors.Control;
            this.btnCapNhat.Location = new System.Drawing.Point(96, 59);
            this.btnCapNhat.Name = "btnCapNhat";
            this.btnCapNhat.Size = new System.Drawing.Size(99, 24);
            this.btnCapNhat.TabIndex = 2;
            this.btnCapNhat.Tag = "THEMMOI";
            this.btnCapNhat.Text = "&Thêm mới";
            this.btnCapNhat.Click += new System.EventHandler(this.BtnEvent_Click);
            // 
            // txtChuThich
            // 
            this.txtChuThich.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.txtChuThich.Location = new System.Drawing.Point(96, 32);
            this.txtChuThich.Name = "txtChuThich";
            this.txtChuThich.Size = new System.Drawing.Size(720, 22);
            this.txtChuThich.TabIndex = 1;
            // 
            // lbChuThich
            // 
            appearance16.FontData.BoldAsString = "False";
            this.lbChuThich.Appearance = appearance16;
            this.lbChuThich.AutoSize = true;
            this.lbChuThich.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.lbChuThich.Location = new System.Drawing.Point(8, 40);
            this.lbChuThich.Name = "lbChuThich";
            this.lbChuThich.Size = new System.Drawing.Size(46, 15);
            this.lbChuThich.TabIndex = 3;
            this.lbChuThich.Text = "Ghi chú:";
            // 
            // txtTen
            // 
            this.txtTen.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
            | System.Windows.Forms.AnchorStyles.Right)));
            this.txtTen.Location = new System.Drawing.Point(96, 5);
            this.txtTen.Name = "txtTen";
            this.txtTen.Size = new System.Drawing.Size(722, 22);
            this.txtTen.TabIndex = 0;
            // 
            // btnReset
            // 
            appearance17.Image = ((object)(resources.GetObject("appearance17.Image")));
            this.btnReset.Appearance = appearance17;
            this.btnReset.BackColorInternal = System.Drawing.SystemColors.Control;
            this.btnReset.Location = new System.Drawing.Point(201, 60);
            this.btnReset.Name = "btnReset";
            this.btnReset.Size = new System.Drawing.Size(99, 24);
            this.btnReset.TabIndex = 3;
            this.btnReset.Tag = "LAMLAI";
            this.btnReset.Text = "&Làm lại";
            this.btnReset.Click += new System.EventHandler(this.BtnEvent_Click);
            // 
            // btnMoRong
            // 
            appearance18.Image = ((object)(resources.GetObject("appearance18.Image")));
            this.btnMoRong.Appearance = appearance18;
            this.btnMoRong.ButtonStyle = Infragistics.Win.UIElementButtonStyle.WindowsXPCommandButton;
            this.btnMoRong.Location = new System.Drawing.Point(26, 5);
            this.btnMoRong.Name = "btnMoRong";
            this.btnMoRong.Size = new System.Drawing.Size(75, 24);
            this.btnMoRong.TabIndex = 18;
            this.btnMoRong.Text = "Mở rộng";
            // 
            // BtnOptionGrid
            // 
            appearance2.Image = ((object)(resources.GetObject("appearance2.Image")));
            this.BtnOptionGrid.Appearance = appearance2;
            this.BtnOptionGrid.BackColorInternal = System.Drawing.SystemColors.Control;
            this.BtnOptionGrid.Location = new System.Drawing.Point(198, 4);
            this.BtnOptionGrid.Name = "BtnOptionGrid";
            this.BtnOptionGrid.Size = new System.Drawing.Size(75, 26);
            this.BtnOptionGrid.TabIndex = 0;
            this.BtnOptionGrid.Text = "Mở &rộng";
            this.BtnOptionGrid.Click += new System.EventHandler(this.BtnEvent_Click);
            // 
            // cvError
            // 
            this.cvError.ContainerToValidate = this;
            this.cvError.HostingForm = this;
            // 
            // rfvtxtTen
            // 
            this.rfvtxtTen.ControlToValidate = this.txtTen;
            this.rfvtxtTen.Icon = ((System.Drawing.Icon)(resources.GetObject("rfvtxtTen.Icon")));
            // 
            // btnChon
            // 
            appearance1.Image = ((object)(resources.GetObject("appearance1.Image")));
            this.btnChon.Appearance = appearance1;
            this.btnChon.BackColorInternal = System.Drawing.SystemColors.Control;
            this.btnChon.ImageList = this.imgList;
            this.btnChon.Location = new System.Drawing.Point(126, 4);
            this.btnChon.Name = "btnChon";
            this.btnChon.Size = new System.Drawing.Size(72, 26);
            this.btnChon.TabIndex = 7;
            this.btnChon.Text = "Chọn";
            this.btnChon.Click += new System.EventHandler(this.BtnEvent_Click);
            // 
            // FrmDM
            // 
            this.AcceptButton = this.btnCapNhat;
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);
            this.CancelButton = this.btnExit;
            this.ClientSize = new System.Drawing.Size(831, 510);
            this.Controls.Add(this.gbTop);
            this.Name = "FrmDM";
            this.Text = "[Tên danh mục]";
            this.Closing += new System.ComponentModel.CancelEventHandler(this.FrmDM_Closing);
            this.Load += new System.EventHandler(this.FrmDM_Load);
            this.Controls.SetChildIndex(this.gbTop, 0);
            this.Controls.SetChildIndex(this.panel1, 0);
            this.Controls.SetChildIndex(this.UGMain, 0);
            this.panel1.ResumeLayout(false);
            ((System.ComponentModel.ISupportInitialize)(this.ultraGridBagLayoutManager1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.UGMain)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.gbTop)).EndInit();
            this.gbTop.ResumeLayout(false);
            this.panel3.ResumeLayout(false);
            this.panel3.PerformLayout();
            ((System.ComponentModel.ISupportInitialize)(this.txtChuThich)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.txtTen)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.rfvtxtTen)).EndInit();
            this.ResumeLayout(false);

        }
        #endregion

        #region Form Events

        private void FrmDM_Load(object sender, System.EventArgs e)
        {
            this.IsChange = false;
            this.caption = this.Text;
            this.SetAuthenticationOnForm();
            setChanged(false);
        }

        #region BtnEvent_Click
        private void BtnEvent_Click(object sender, System.EventArgs e)
        {
            try
            {
                UltraButton btn = (UltraButton)(sender);
                switch (btn.Name)
                {
                    //Sự kiện Click nút thoát
                    case "BtnOptionGrid":
                        switch (i)
                        {
                            case 0:
                                UGMain.Anchor = (System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Bottom));
                                UGMain.Dock = DockStyle.Fill;
                                gbTop.Visible = false;
                                BtnOptionGrid.Text = "Thu &hẹp";
                                i = 1;

                                // Hiện thị khung mở rộng trên cùng
                                //ugbMain.BringToFront();
                                break;
                            case 1:
                                UGMain.Dock = DockStyle.Fill;
                                gbTop.Dock = DockStyle.Top;
                                gbTop.Visible = true;
                                //UGMain.Anchor = (System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Bottom));
                                BtnOptionGrid.Text = "Mở &rộng";
                                i = 0;
                                break;
                        }
                        break;

                    //Sự kiện Click nút Thêm mới
                    case "btnCapNhat":
                        cvError.Validate();
                        if (!cvError.IsValid)
                        {
                            return;
                        }
                        if (btnCapNhat.Tag.ToString() != "CAPNHAT")
                        {
                            if (this.CheckContains(txtTen.Text))
                            {
                                MessageBox.Show("Tên này đã tồn tại, hãy kiểm tra lại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                return;
                            }
                            DataRow dr = dsDM.Tables[0].NewRow();
                            dr["Ten"] = txtTen.Text;
                            dr["GhiChu"] = txtChuThich.Text;
                            dsDM.Tables[0].Rows.Add(dr);
                            txtTen.Text = "";
                            txtChuThich.Text = "";
                            txtTen.Focus();
                            UGMain.UpdateData();
                            this.btnDelete.Enabled = true;
                            this.setChanged(true);
                        }
                        else
                        {
                            if (!curEditRow.Cells["Ten"].Value.ToString().ToLower().Equals(txtTen.Text.ToLower()))
                            {
                                if (this.CheckContains(txtTen.Text))
                                {
                                    MessageBox.Show("Tên này đã tồn tại,hãy kiểm tra lại.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    return;
                                }
                            }
                            UGMain.ActiveRow.Cells["Ten"].Value = txtTen.Text;
                            UGMain.ActiveRow.Cells["GhiChu"].Value = txtChuThich.Text;
                            UGMain.Enabled = true;
                            txtTen.Text = "";
                            txtChuThich.Text = "";
                            btnCapNhat.Text = "&Thêm mới";
                            btnCapNhat.Appearance.Image = Properties.Resources.add;
                            btnReset.Text = "&Làm lại";
                            btnCapNhat.Tag = "THEMMOI";
                            btnReset.Tag = "LAMLAI";
                            this.btnEdit.Enabled = true;
                            this.btnDelete.Enabled = true;
                            this.setChanged(true);
                        }
                        checkAuthorization(ObjRole);
                        break;
                    case "btnReset":
                        if (btnReset.Tag.ToString() == "LAMLAI")
                        {
                            txtTen.Text = "";
                            txtChuThich.Text = "";
                            txtTen.Focus();
                        }
                        else
                        {
                            UGMain.Enabled = true;
                            btnCapNhat.Text = "&Thêm mới";
                            btnCapNhat.Appearance.Image = Properties.Resources.add;
                            btnReset.Text = "&Làm lại";
                            btnCapNhat.Tag = "THEMMOI";
                            btnReset.Tag = "LAMLAI";
                            txtTen.Text = "";
                            txtChuThich.Text = "";
                            txtTen.Focus();
                            this.btnEdit.Enabled = true;
                            this.btnDelete.Enabled = true;
                        }
                        checkAuthorization(ObjRole);
                        if (base.IsChange)
                            setChanged(true);
                        else
                            setChanged(false);

                        break;
                    case "btnDelete":
                        UGMain.UpdateData();
                        curEditRow = this.UGMain.ActiveRow;
                        if (null != curEditRow)
                        {
                            this.Delete(strIDHeader);
                        }
                        checkAuthorization(ObjRole);
                        break;
                    //Sự kiện Click nút Sửa
                    case "btnEdit":
                        this.Edit();
                        break;
                    case "btnUpdate":
                        this.Save();
                        //frmThemMoiNhanKhau.bLuu = true;
                        UGMain.Enabled = true;
                        btnCapNhat.Text = "&Thêm mới";
                        btnCapNhat.Appearance.Image = Properties.Resources.add;
                        btnReset.Text = "&Làm lại";
                        btnCapNhat.Tag = "THEMMOI";
                        btnReset.Tag = "LAMLAI";
                        this.txtTen.Text = "";
                        txtTen.Focus();
                        this.txtChuThich.Text = "";
                        this.btnEdit.Enabled = true;
                        this.btnDelete.Enabled = this.UGMain.Rows.Count != 0;
                        checkAuthorization(ObjRole);
                        setChanged(false);
                        break;
                    case "btnCancel":
                        if (btnCapNhat.Tag.ToString() == "CAPNHAT")
                        {
                            UGMain.Enabled = true;
                            btnCapNhat.Text = "&Thêm mới";
                            btnCapNhat.Appearance.Image = Properties.Resources.add;
                            btnReset.Text = "&Làm lại";
                            btnCapNhat.Tag = "THEMMOI";
                            btnReset.Tag = "LAMLAI";
                            txtTen.Text = "";
                            txtChuThich.Text = "";
                            txtTen.Focus();
                        }
                        this.fillDataToGrid(strCurrentForm);
                        this.btnEdit.Enabled = true;
                        this.btnDelete.Enabled = true;
                        checkAuthorization(ObjRole);
                        this.setChanged(false);
                        break;
                    //case "btnChon":
                    //    if (this.IsChange)
                    //    {
                    //        MessageBox.Show("Yêu cầu lưu dữ liệu trước khi chọn", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    //    }
                    //    else
                    //    {
                    //        switch (UGMain.ActiveRow.Band.Key)
                    //        {
                    //            case "tb_DM_QUOCTICH":
                    //                if (UGMain.ActiveRow.Cells["ID"].Value != DBNull.Value)
                    //                    frmThemMoiNhanKhau.iValueResult = (int)UGMain.ActiveRow.Cells["ID"].Value;
                    //                break;
                    //            case "tb_DM_DANTOC":
                    //                if (UGMain.ActiveRow.Cells["ID"].Value != DBNull.Value)
                    //                    frmThemMoiNhanKhau.iValueResult = (int)UGMain.ActiveRow.Cells["ID"].Value;
                    //                break;
                    //            case "tb_DM_TONGIAO":
                    //                if (UGMain.ActiveRow.Cells["ID"].Value != DBNull.Value)
                    //                    frmThemMoiNhanKhau.iValueResult = (int)UGMain.ActiveRow.Cells["ID"].Value;
                    //                break;
                    //            case "tb_DM_QUANHE_GIADINH":
                    //                if (UGMain.ActiveRow.Cells["ID"].Value != DBNull.Value)
                    //                    frmThemMoiNhanKhau.iValueResult = (int)UGMain.ActiveRow.Cells["ID"].Value;
                    //                break;

                    //            case "tb_DM_TRINHDO_CHUYENMON":
                    //                if (UGMain.ActiveRow.Cells["ID"].Value != DBNull.Value)
                    //                    frmThemMoiNhanKhau.iValueResult = (int)UGMain.ActiveRow.Cells["ID"].Value;
                    //                break;
                    //            case "tb_DM_TRINHDO_HOCVAN":
                    //                if (UGMain.ActiveRow.Cells["ID"].Value != DBNull.Value)
                    //                    frmThemMoiNhanKhau.iValueResult = (int)UGMain.ActiveRow.Cells["ID"].Value;
                    //                break;
                    //            case "tb_DM_TRINHDO_NGOAINGU":
                    //                if (UGMain.ActiveRow.Cells["ID"].Value != DBNull.Value)
                    //                    frmThemMoiNhanKhau.iValueResult = (int)UGMain.ActiveRow.Cells["ID"].Value;
                    //                break;

                    //        }
                    //        if (frmThemMoiNhanKhau.iValueResult != 0)
                    //        {
                    //            this.DialogResult = DialogResult.OK;
                    //            this.Close();
                    //        }
                    //    }
                    //    break;
                    case "btnExit":
                        this.Close();
                        break;
                }
            }
            catch (Exception ex)
            {
                Logger.LocalLogger.Instance().WriteMessage(ex);
            }
        }
        #endregion

        #region UGMain_InitializeLayout
        private void UGMain_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e)
        {
            UltraGridControls.SetGridStyle(UGMain);

            e.Layout.Override.SupportDataErrorInfo = SupportDataErrorInfo.RowsAndCells;
            e.Layout.Override.DataErrorCellAppearance.ForeColor = Color.Red;
            e.Layout.Override.DataErrorRowAppearance.BackColor = Color.LightYellow;
            e.Layout.Override.DataErrorRowSelectorAppearance.BackColor = Color.Green;

            e.Layout.Override.RowSelectorWidth = 32;
            e.Layout.ScrollStyle = ScrollStyle.Immediate;
            e.Layout.ScrollBounds = ScrollBounds.ScrollToFill;
            e.Layout.Override.HeaderClickAction = HeaderClickAction.SortMulti;
        }
        #endregion

        #region FrmDM_Closing
        private void FrmDM_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (this.IsChange)
            {
                DialogResult result = MessageBox.Show(QLNHK.BLL.ThongBao.MSG_Warring_SaveData, QLNHK.BLL.ThongBao.MSG_Caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    this.Save();
                }
                this.IsChange = false;
            }
        }
        #endregion

        /// <summary>
        /// Sự kiện xảy ra sau khi xóa 1 row
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UGMain_AfterRowsDeleted(object sender, System.EventArgs e)
        {
            //nếu không có sữ liệu, nút Xóa disable
            this.btnDelete.Enabled = this.UGMain.Rows.Count != 0;
        }

        /// <summary>
        /// Sự kiện xảy ra trước khi xóa 1 row
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UGMain_BeforeRowsDeleted(object sender, Infragistics.Win.UltraWinGrid.BeforeRowsDeletedEventArgs e)
        {
            //ẩn thông báo xóa khi phím Delete được nhấn
            e.DisplayPromptMsg = false;
            if (_isDelete == false)  //nếu xóa không thành công các row
                e.Cancel = true; //dừng thức hiện lệnh
        }

        /// <summary>
        /// Sự kiện xảy ra khi nhấm đôi 1 row
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UGMain_DoubleClickRow(object sender, Infragistics.Win.UltraWinGrid.DoubleClickRowEventArgs e)
        {
            this.Edit();
        }

        /// <summary>
        /// Sự kiện xảy ra khi phím Delete được nhấn
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UGMain_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                curEditRow = this.UGMain.ActiveRow;//lấy row hiện tại
                if (null != curEditRow)
                {
                    this.Delete(strIDHeader);
                }
            }
        }
        #endregion

        #region Private Methods

        #region Delete
        // Author: Hungtq . Date: 27/03/2006.
        // Modifier: Hungtq. Date:  27/03/2006.
        // Liệt kê những gì đã chỉnh sửa:	
        /// <summary>
        /// Xóa dữ liệu của 1 danh mục 
        /// </summary>
        /// <param name="indexRow">Chỉ mục dòng được xóa</param>
        /// <param name="strID">Mã danh mục</param>
        private void listDMDeleted(int pIdDM, string strID)
        {
            try
            {
                this._isDelete = false;
                //kiểm tra DM đã được sử dụng chưa?
                //nếu đã sử dụng, không cho phép xóa
                //ngược lại, xóa trong CSDL

                switch (strCurrentForm)
                {
                    //Ho khau - Nhan khau
                    case DMCatalogue.DM_QUOCTICH:
                        //if (!ObjDMQuocTich.IsUsed(pIdDM))
                        if (NhanKhau.SelectCollectionBy_QuocTichID(pIdDM).Count == 0)
                        {
                            //xóa một row trong csdl  
                            DM_QuocTich.DeleteDM_QuocTich(pIdDM);
                            this._isDelete = true;
                        }
                        break;
                    case DMCatalogue.DM_DANTOC:
                        //if (!ObjDMDanToc.IsUsed(pIdDM))
                        if (NhanKhau.SelectCollectionBy_DanTocID(pIdDM).Count == 0)
                        {
                            //xóa trong csdl theo hàng i và cell 
                            DM_DanToc.DeleteDM_DanToc(pIdDM);
                            this._isDelete = true;
                        }
                        break;
                    case DMCatalogue.DM_TONGIAO:
                        //if (!ObjDMTonGiao.IsUsed(pIdDM))
                        if (NhanKhau.SelectCollectionBy_TonGiaoID(pIdDM).Count == 0)
                        {
                            //xóa trong csdl theo hàng i và cell 
                            DM_TonGiao.DeleteDM_TonGiao(pIdDM);
                            this._isDelete = true;
                        }
                        break;
                    case DMCatalogue.DM_QUANHE_GIADINH:
                        //if (!ObjDMQuanHeGiaDinh.IsUsed(pIdDM))
                        if (NhanKhau_QuanHeGiaDinh.SelectCollectionBy_QuanHeID(pIdDM).Count == 0)
                        {
                            //xóa trong csdl theo hàng i và cell 
                            DM_QuanHeGiaDinh.DeleteDM_QuanHeGiaDinh(pIdDM);
                            this._isDelete = true;
                        }
                        break;

                    case DMCatalogue.DM_TRINHDO_CHUYENMON:
                        //if (!ObjDMTrinhDoChuyenMon.IsUsed(pIdDM))
                        if (NhanKhau.SelectCollectionBy_TrinhDoChuyenMonID(pIdDM).Count == 0)
                        {
                            //xóa một row trong csdl  
                            DM_TrinhDoChuyenMon.DeleteDM_TrinhDoChuyenMon(pIdDM);
                            this._isDelete = true;
                        }
                        break;
                    case DMCatalogue.DM_TRINHDO_HOCVAN:
                        //if (!ObjDMTrinhDoHocVan.IsUsed(pIdDM))
                        if (NhanKhau.SelectCollectionBy_TrinhDoHocVanID(pIdDM).Count == 0)
                        {
                            //xóa một row trong csdl  
                            DM_TrinhDoHocVan.DeleteDM_TrinhDoHocVan(pIdDM);
                            this._isDelete = true;
                        }
                        break;
                    case DMCatalogue.DM_TRINHDO_NGOAINGU:
                        //if (!ObjDMTrinhDoNgoaiNgu.IsUsed(pIdDM))
                        if (NhanKhau.SelectCollectionBy_TrinhDoNgoaiNguID(pIdDM).Count == 0)
                        {
                            //xóa một row trong csdl  
                            DM_TrinhDoNgoaiNgu.DeleteDM_TrinhDoNgoaiNgu(pIdDM);
                            this._isDelete = true;
                        }
                        break;
                    case DMCatalogue.DM_LOAIHOKHAU:
                        if (HoKhau.SelectCollectionBy_LoaiHoKhauID(pIdDM).Count == 0)
                        {
                            //xóa một row trong csdl  
                            DM_LoaiHoKhau.DeleteDM_LoaiHoKhau(pIdDM);
                            this._isDelete = true;
                        }
                        break;

                    //Doi tuong
                    case DMCatalogue.DM_LOAIDOITUONG:
                        if (DoiTuong_TienAn.SelectCollectionBy_DoiTuongPhanLoaiID(pIdDM).Count == 0)
                        {
                            //xóa một row trong csdl  
                            DoiTuong_PhanLoai.DeleteDoiTuong_PhanLoai(pIdDM);
                            this._isDelete = true;
                        }
                        break;
                    case DMCatalogue.DM_DANHMUCDOITUONG:
                        if (DoiTuong_TienAn.SelectCollectionBy_DoiTuongDanhMucID(pIdDM).Count == 0)
                        {
                            //xóa một row trong csdl  
                            DoiTuong_DanhMuc.DeleteDoiTuong_DanhMuc(pIdDM);
                            this._isDelete = true;
                        }
                        break;
                    case DMCatalogue.DM_HEDOITUONG:
                        if (DoiTuong_TienAn.SelectCollectionBy_DoiTuongHeID(pIdDM).Count == 0)
                        {
                            //xóa một row trong csdl  
                            DoiTuong_He.DeleteDoiTuong_He(pIdDM);
                            this._isDelete = true;
                        }
                        break;
                }
            }
            catch (Exception ex)
            {
                Logger.LocalLogger.Instance().WriteMessage(ex);
            }
        }

        // Author:   Date: 
        // Modifier:  Date:  
        // Liệt kê những gì đã chỉnh sửa:
        /// <summary>
        /// Xóa dữ liệu thông tin danh mục trực tiếp trong CSDL
        /// </summary>
        /// <param name="strID">Tên danh mục được chọn tương ứng (kiểu lớp HETHONG.HRMGlobal.DMCatalogue)</param>
        private void Delete(string strID)
        {
            try
            {
                SetAuthenticationOnForm();
                if (frmMain.ObjNguoiDung.IsAdministrator || ObjRole.Xoa)
                {
                    int j = 0;
                    int t = 0;

                    if (DialogResult.Yes == MessageBox.Show("Bạn có muốn xóa các dữ liệu này không?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Information))
                    {
                        //thiết lập DialogResult của form  
                        this.DialogResult = DialogResult.Yes;
                        //thiết lập selected cho row active 

                        this.UGMain.ActiveRow.Selected = true;
                        listUnDelete = new string[UGMain.Selected.Rows.Count];
                        listDeleteSuccess = new string[UGMain.Selected.Rows.Count];

                        foreach (UltraGridRow rowsSelect in UGMain.Rows)
                        {
                            if (rowsSelect.Selected == true)
                            {
                                //kiểm tra row i cell dm có giá trị khác null
                                if (rowsSelect.Cells[strID].Value != DBNull.Value)
                                {
                                    this.listDMDeleted(Convert.ToInt32(rowsSelect.Cells[strID].Value), strID);

                                    if (_isDelete)
                                    {
                                        //lấy danh sách detele thành công ra một mảng
                                        listDeleteSuccess[t] = rowsSelect.Cells["Ten"].Value.ToString();
                                        t++;
                                    }
                                    else
                                    {
                                        listUnDelete[j] = rowsSelect.Cells["Ten"].Value.ToString();
                                        j++;
                                    }
                                }
                                //kiểm tra row i cell dm có giá trị bằng null
                                else if (rowsSelect.Cells[strID].Value == DBNull.Value)
                                {
                                    listDeleteSuccess[t] = rowsSelect.Cells["Ten"].Value.ToString();
                                    //row phải xóa hẳn khỏi lưới, không phục hồi lại được row đã xóa
                                    t++;
                                }
                            }
                        }

                    }
                    else
                    {
                        //nếu không đồng ý xóa,
                        //thiết lập DialogResult.No cho form  
                        this.DialogResult = DialogResult.No;
                        return;
                    }

                    //Thực hiện xóa sau khi đã đánh dấu danh sách các bản ghi cần xóa
                    for (int i = 0; i < listDeleteSuccess.Length; i++)
                    {
                        for (int k = 0; k < UGMain.Rows.Count; k++)
                        {
                            //Kiểm tra nếu row có tên = tên có trong danh sách chọn xóa
                            if (UGMain.Rows[k].Cells["Ten"].Value.ToString().Equals(listDeleteSuccess[i]))
                            {
                                _isDelete = true;
                                UGMain.Rows[k].Delete(false);
                            }
                        }
                        UGMain.UpdateData();
                    }

                    // mở form hiển thị danh sách các row đã được xóa và không được phép xóa
                    if (this.DialogResult == DialogResult.Yes)
                        this.openDeleteResultDialog();
                }
                else
                    MessageBox.Show("Không có quyền xóa.", Text, MessageBoxButtons.OK, MessageBoxIcon.Information);

            }
            catch (Exception ex)
            {
                Logger.LocalLogger.Instance().WriteMessage(ex);
            }
        }
        #endregion

        // Author:  Date: 
        // Modifier:  Date:  
        // Liệt kê những gì đã chỉnh sửa:
        /// <summary>
        /// Lấy thông tin dữ liệu các danh mục
        /// </summary>
        /// <param name="strFormName">Tên danh mục được chọn tương ứng (kiểu lớp HETHONG.HRMGlobal.DMCatalogue)</param>
        private void fillDataToGrid(string strFormName)
        {
            try
            {
                //kiểm tra tên Danh mục được chọn
                //lấy danh sách thông tin tương ứng với tên DM nào được chọn
                switch (strFormName)
                {
                    //Ho khau - Nhan khau
                    case DMCatalogue.DM_QUOCTICH:
                        ObjDMQuocTich = new DM_QuocTich();
                        dsDM = DM_QuocTich.SelectAll();
                        break;
                    case DMCatalogue.DM_DANTOC:
                        ObjDMDanToc = new DM_DanToc();
                        dsDM = DM_DanToc.SelectAll();
                        break;
                    case DMCatalogue.DM_TONGIAO:
                        ObjDMTonGiao = new DM_TonGiao();
                        dsDM = DM_TonGiao.SelectAll();
                        break;
                    case DMCatalogue.DM_QUANHE_GIADINH:
                        ObjDMQuanHeGiaDinh = new DM_QuanHeGiaDinh();
                        dsDM = DM_QuanHeGiaDinh.SelectAll();
                        break;

                    case DMCatalogue.DM_TRINHDO_CHUYENMON:
                        ObjDMTrinhDoChuyenMon = new DM_TrinhDoChuyenMon();
                        dsDM = DM_TrinhDoChuyenMon.SelectAll();
                        break;
                    case DMCatalogue.DM_TRINHDO_HOCVAN:
                        ObjDMTrinhDoHocVan = new DM_TrinhDoHocVan();
                        dsDM = DM_TrinhDoHocVan.SelectAll();
                        break;
                    case DMCatalogue.DM_TRINHDO_NGOAINGU:
                        ObjDMTrinhDoNgoaiNgu = new DM_TrinhDoNgoaiNgu();
                        dsDM = DM_TrinhDoNgoaiNgu.SelectAll();
                        break;

                    case DMCatalogue.DM_LOAIHOKHAU:
                        ObjDMLoaiHoKhau = new DM_LoaiHoKhau();
                        dsDM = DM_LoaiHoKhau.SelectAll();
                        break;

                    //Doi tuong
                    case DMCatalogue.DM_LOAIDOITUONG:
                        ObjDMPhanLoai = new DoiTuong_PhanLoai();
                        dsDM = DoiTuong_PhanLoai.SelectAll();
                        break;
                    case DMCatalogue.DM_DANHMUCDOITUONG:
                        ObjDMDanhMuc = new DoiTuong_DanhMuc();
                        dsDM = DoiTuong_DanhMuc.SelectAll();
                        break;
                    case DMCatalogue.DM_HEDOITUONG:
                        ObjDMHe = new DoiTuong_He();
                        dsDM = DoiTuong_He.SelectAll();
                        break;
                }

                dsDM.AcceptChanges();//cập nhật thay đổi DataSet
                UGMain.DataSource = dsDM;//databinding
            }
            catch (Exception ex)
            {
                Logger.LocalLogger.Instance().WriteMessage(ex);
                return;
            }
        }

        #region Set Authentication On Form
        /// Tác giả: huypvt . Ngày tạo: 21/12/2005.
        /// Người sửa:          Ngày sửa:  
        /// Liệt kê những gì đã chỉnh sửa:
        /// <summary>
        /// </summary>
        private Infragistics.Win.DefaultableBoolean GetStatus(bool values)
        {
            if (values)
            {
                return Infragistics.Win.DefaultableBoolean.True;
            }
            else
            {
                return Infragistics.Win.DefaultableBoolean.False;
            }
        }

        /// Tác giả: huypvt . Ngày tạo: 21/12/2005.
        /// Người sửa:          Ngày sửa:  
        /// Liệt kê những gì đã chỉnh sửa:
        /// <summary>Phân quyền cho form</summary>
        private void SetAuthenticationOnForm()
        {
            try
            {
                if (!frmMain.ObjNguoiDung.IsAdministrator)
                {
                    ObjRole = new cls_Role(Global.GetRole(ObjPhanQuyen.GetRoleByIDChucNang(frmMain.ObjNguoiDung.ID_NguoiDung, this.Tag.ToString())));
                    this.checkAuthorization(ObjRole);
                }
            }
            catch (Exception ex)
            {
                Logger.LocalLogger.Instance().WriteMessage(ex);
            }
        }

        /// <summary>
        /// Kiểm tra quyền hạn trên form (Hiển thị, Thêm mới, Sửa, Xóa)
        /// </summary>
        private void checkAuthorization(QLNHK.BLL.cls_Role role)
        {
            if (role != null)
            {
                if (!role.HienThi)
                {
                    foreach (Control ctl in this.Controls)
                    {
                        ctl.Enabled = false;
                    }
                }
                else
                {
                    //kiem tra thao tac tren luoi
                    UGMain.DisplayLayout.Bands[0].Override.AllowAddNew = role.Them == true ? AllowAddNew.Yes : AllowAddNew.No;
                    UGMain.DisplayLayout.Bands[0].Override.AllowUpdate = GetStatus(role.Sua || role.Them);
                    UGMain.DisplayLayout.Bands[0].Override.AllowDelete = GetStatus(role.Xoa);
                    //Button "Them moi"
                    if (btnCapNhat.Tag.ToString() == "THEMMOI")
                        btnCapNhat.Enabled = role.Them;
                    else if (btnCapNhat.Tag.ToString() == "CAPNHAT")
                        btnCapNhat.Enabled = role.Sua;
                    //Button "Sua"
                    btnEdit.Enabled = role.Sua;
                    //Button "Xoa"
                    btnDelete.Enabled = role.Xoa;
                    if (role.Xoa)
                        btnDelete.Enabled = UGMain.Rows.Count != 0;
                    if (base.IsChange)
                    {
                        //Button "Bo qua"
                        btnCancel.Enabled = frmMain.ObjNguoiDung.IsAdministrator || role.Them || role.Sua || role.Xoa;
                        //Button "Luu"
                        btnUpdate.Enabled = frmMain.ObjNguoiDung.IsAdministrator || role.Them || role.Sua || role.Xoa;
                    }
                    else
                    {
                        btnCancel.Enabled = false;
                        btnUpdate.Enabled = false;
                    }
                }
            }
            //Button "Dong" luon luon hien thi
            btnExit.Enabled = true;
        }

        #endregion

        #region Save
        // Author:  Date: 
        // Modifier:  Date:  
        // Liệt kê những gì đã chỉnh sửa:
        /// <summary>
        /// Lưu dữ liệu thông tin danh mục vào CSDL
        /// </summary>
        private void Save()
        {
            try
            {
                //cập nhật lại lưới
                UGMain.UpdateData();
                //kiểm tra tên Danh mục được chọn
                //và lưu dữ liệu của DM tương ứng 
                switch (strCurrentForm)
                {
                    //Ho khau - Nhan khau
                    case DMCatalogue.DM_QUOCTICH:
                        DM_QuocTich.UpdateDataSet(dsDM);
                        break;
                    case DMCatalogue.DM_DANTOC:
                        DM_DanToc.UpdateDataSet(dsDM);
                        break;
                    case DMCatalogue.DM_TONGIAO:
                        DM_TonGiao.UpdateDataSet(dsDM);
                        break;
                    case DMCatalogue.DM_QUANHE_GIADINH:
                        DM_QuanHeGiaDinh.UpdateDataSet(dsDM);
                        break;

                    case DMCatalogue.DM_TRINHDO_CHUYENMON:
                        DM_TrinhDoChuyenMon.UpdateDataSet(dsDM);
                        break;
                    case DMCatalogue.DM_TRINHDO_HOCVAN:
                        DM_TrinhDoHocVan.UpdateDataSet(dsDM);
                        break;
                    case DMCatalogue.DM_TRINHDO_NGOAINGU:
                        DM_TrinhDoNgoaiNgu.UpdateDataSet(dsDM);
                        break;

                    case DMCatalogue.DM_LOAIHOKHAU:
                        DM_LoaiHoKhau.UpdateDataSet(dsDM);
                        break;

                    //Doi tuong
                    case DMCatalogue.DM_LOAIDOITUONG:
                        DoiTuong_PhanLoai.UpdateDataSet(dsDM);
                        break;
                    case DMCatalogue.DM_DANHMUCDOITUONG:
                        DoiTuong_DanhMuc.UpdateDataSet(dsDM);
                        break;
                    case DMCatalogue.DM_HEDOITUONG:
                        DoiTuong_He.UpdateDataSet(dsDM);
                        break;
                }

                this.fillDataToGrid(strCurrentForm);//load lại thông tin của DM tương ứng
                base.setChanged(false);	//thiết lập trạng thái của form		
            }
            catch (Exception ex)
            {
                Logger.LocalLogger.Instance().WriteMessage(ex);
            }
        }
        #endregion

        // Author:  Date: 
        // Modifier: Date:  
        // Liệt kê những gì đã chỉnh sửa:
        /// <summary>
        /// Thiết lập trạng thái hiển thị của các control trên form
        /// </summary>
        /// <param name="values"></param>
        private void SetEnableControl(bool values)
        {
            this.txtTen.Enabled = values;
            this.txtChuThich.Enabled = values;
            btnCapNhat.Enabled = values;
            btnReset.Enabled = values;
        }

        // Author: Hungtq . Date: 23/03/2006.
        // Modifier: Hungtq. Date:  23/03/2006.
        // Liệt kê những gì đã chỉnh sửa:	
        /// <summary>
        /// Hiển thị thông tin các danh mục đã xóa và không được phép xóa
        /// </summary>
        private void openDeleteResultDialog()
        {
            // form hiển thị thông tin các danh mục đã xóa và không được phép xóa
            FrmDeleteResultDialog f = new FrmDeleteResultDialog();
            FrmDeleteResultDialog.strDeleteSuccess = this.listDeleteSuccess;
            FrmDeleteResultDialog.strUndelete = this.listUnDelete;
            f.ShowDialog();
        }

        /// <summary>
        /// Kiểm tra xem tên danh mục đã tồn tại trong CSDL chưa
        /// </summary>
        /// <param name="strName">Tên danh mục</param>
        /// <returns></returns>
        private bool CheckContains(string strName)
        {
            foreach (UltraGridRow row in UGMain.Rows)
            {
                if (row.Cells["Ten"].Value.ToString().Trim().ToLower().Equals(strName.Trim().ToLower()))
                {
                    return true;
                }
            }
            return false;
        }

        /// <summary>
        /// Chỉnh sửa dữ liệu được chọn
        /// </summary>
        private void Edit()
        {
            SetAuthenticationOnForm();

            if (frmMain.ObjNguoiDung.IsAdministrator || ObjRole.Sua)
            {
                curEditRow = this.UGMain.ActiveRow;//lấy row được chọn
                if (null != curEditRow)
                {
                    UGMain.Enabled = false;
                    txtTen.Text = curEditRow.Cells["Ten"].Value.ToString();
                    txtChuThich.Text = curEditRow.Cells["GhiChu"].Value.ToString();
                    btnCapNhat.Text = "&Cập nhật";
                    btnCapNhat.Appearance.Image = Properties.Resources.Edit_16x16;
                    btnCapNhat.Tag = "CAPNHAT";
                    btnReset.Text = "&Bỏ qua";
                    btnReset.Tag = "BOQUA";
                    this.btnEdit.Enabled = false;
                    this.btnDelete.Enabled = false;
                    //Button "Them moi"
                    if (btnCapNhat.Tag.ToString() == "THEMMOI")
                        btnCapNhat.Enabled = frmMain.ObjNguoiDung.IsAdministrator || ObjRole.Them;
                    else if (btnCapNhat.Tag.ToString() == "CAPNHAT")
                        btnCapNhat.Enabled = frmMain.ObjNguoiDung.IsAdministrator || ObjRole.Sua;
                }
            }
            else
                MessageBox.Show("Không có quyền sửa.", Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        // Author:  Date: 
        // Modifier:  Date:  
        // Liệt kê những gì đã chỉnh sửa:
        /// <summary>
        /// Thiết lập Layout cho các cột trên lưới
        /// </summary>
        /// <param name="ID"></param>
        /// <param name="Ten"></param>
        private void SetHeaderGrid(string ID, string Ten)
        {
            try
            {
                UGMain.DisplayLayout.Bands[0].Columns[ID].Hidden = true;
                UGMain.DisplayLayout.Bands[0].Columns["Ten"].Header.Caption = Ten;
                UGMain.DisplayLayout.Bands[0].Columns["GhiChu"].Header.Caption = "Ghi chú";
            }
            catch (Exception ex) { Logger.LocalLogger.Instance().WriteMessage(ex); }
        }

        #endregion

    }
}
